﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Configuration;
using Reportes.EntidadesReporte;
using Entidades;

namespace Reportes.AccesoBD
{
    public class GestorRecibos
    {
        //este método recibe la Entidad original recibo, y la acomoda de acuerdo a lo que tengo que mostrar
        public EntidadRecibo CrearReciboAMostrar(Recibo r)
        {
            EntidadRecibo miReciboMostrar = new EntidadRecibo();
            miReciboMostrar.FechaRecibo = r.Fecha;
            miReciboMostrar.NroRecibo = r.NroRecibo;
            miReciboMostrar.NroSerie = r.NroSerie;
            miReciboMostrar.LetrasCantidadAPagar = r.TotalEnLetras;
            miReciboMostrar.Total = r.Total;
            
            //detalle de conceptos
            string conceptosRecibo = "";
            foreach (DetalleRecibo item in r.MisDetallesRecibo)
            {
                conceptosRecibo += item.Concepto + ", ";
            }
            miReciboMostrar.DescripcionConceptos = conceptosRecibo;

            if (r.ApellidoNombrePaciente == "")
            {
                //cargamos el cliente
                ClienteRecibo c = buscarCliente(r.IdPersonaPaciente);
                miReciboMostrar.ApellidoNombreCliente = c.ApellidoNombreCliente;
                miReciboMostrar.DomicilioCompletoCliente = c.Direccion;
                miReciboMostrar.LocalidadCliente = c.Localidad;
                if (c.Telefono > 0)
                    miReciboMostrar.TelefonoCliente = c.Telefono.ToString();
            }
            else
                miReciboMostrar.ApellidoNombreCliente = r.ApellidoNombrePaciente;


            return miReciboMostrar;
        }

        private ClienteRecibo buscarCliente(long idPers)
        {
            ClienteRecibo miCliente = new ClienteRecibo();
            string strConexion = ConfigurationManager.ConnectionStrings[1].ToString();//.ConnectionString;
            SqlConnection conexion = new SqlConnection(strConexion);
            conexion.Open();
            try
            {
                string comando = "SELECT Persona.nombre, Persona.apellido, Persona.tipoDocumento, Persona.nroDocumento, Persona.telefono, Domicilio.calle, Domicilio.numero, Domicilio.piso, Domicilio.departamento, "
                               + "Paciente.idPersona, Barrio.nombre AS barrio, Localidad.nombre AS localidad "
                               + "FROM Barrio INNER JOIN Domicilio ON Barrio.idBarrio = Domicilio.idBarrio INNER JOIN "
                               + "Localidad ON Barrio.idLocalidad = Localidad.idLocalidad INNER JOIN Paciente ON Domicilio.idDomicilio = Paciente.idDomicilio INNER JOIN "
                               + "Persona ON Paciente.idPersona = Persona.codPersona "
                               + "WHERE (Paciente.idPersona = @codPersona)";
                SqlCommand sqlcmd = new SqlCommand(comando, conexion);
                sqlcmd.Parameters.Add(new SqlParameter("codPersona", idPers));
                SqlDataReader dr = sqlcmd.ExecuteReader();
                if (dr.HasRows)
                {
                    while (dr.Read())
                    {
                        miCliente.IdPersonaCliente = long.Parse(dr["idPersona"].ToString());
                        miCliente.ApellidoNombreCliente = dr["apellido"].ToString() + ", " + dr["nombre"].ToString();
                        miCliente.Direccion = dr["calle"].ToString() + " " + dr["numero"].ToString();
                        if (dr["piso"] != DBNull.Value)
                            miCliente.Direccion += dr["piso"].ToString();
                        if (dr["departamento"] != DBNull.Value)
                            miCliente.Direccion += dr["departamento"].ToString();
                        miCliente.Direccion += dr["barrio"].ToString();
                        if (dr["telefono"] != DBNull.Value)
                            miCliente.Telefono = long.Parse(dr["telefono"].ToString());
                        miCliente.Localidad = dr["localidad"].ToString();    
                    }
                    
                }
            }
            catch (Exception ex)
            {

                throw;
            }
            finally
            {
                conexion.Close();
            }
            return miCliente;
        }

        //este método lo busca desde la base de datos
        //public EntidadRecibo CrearReciboAMostrar(int nroSerie, int nroRecibo)
        //{
 
        //}
    }
}
